#ifndef lint
static const char yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93";
#endif

#define YYBYACC 1
#define YYMAJOR 1
#define YYMINOR 9
#define YYPATCH 20130304

#define YYEMPTY        (-1)
#define yyclearin      (yychar = YYEMPTY)
#define yyerrok        (yyerrflag = 0)
#define YYRECOVERING() (yyerrflag != 0)

#define YYPREFIX "yy"

#define YYPURE 0

#line 2 "pcat.y"

extern int lineno;
extern bool fileEnd;

#include "ast.h"
#include "lex.yy.c"
#include <vector>

/* parse error */
void yyerror ( char* s ) {
    printf("*** %s (line : %d, token: %s)\n", s, lineno, yytext);
};

#line 16 "pcat.y"
#ifdef YYSTYPE
#undef  YYSTYPE_IS_DECLARED
#define YYSTYPE_IS_DECLARED 1
#endif
#ifndef YYSTYPE_IS_DECLARED
#define YYSTYPE_IS_DECLARED 1
typedef union {
        char*           Tstring;
        ast*            Tast;
        ast_list*       Tast_list;

        int intConst;
        double doubleConst;
        char* stringConst;
} YYSTYPE;
#endif /* !YYSTYPE_IS_DECLARED */
#line 50 "y.tab.c"

/* compatibility with bison */
#ifdef YYPARSE_PARAM
/* compatibility with FreeBSD */
# ifdef YYPARSE_PARAM_TYPE
#  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
# else
#  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
# endif
#else
# define YYPARSE_DECL() yyparse(void)
#endif

/* Parameters sent to lex. */
#ifdef YYLEX_PARAM
# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
# define YYLEX yylex(YYLEX_PARAM)
#else
# define YYLEX_DECL() yylex(void)
# define YYLEX yylex()
#endif

/* Parameters sent to yyerror. */
#ifndef YYERROR_DECL
#define YYERROR_DECL() yyerror(const char *s)
#endif
#ifndef YYERROR_CALL
#define YYERROR_CALL(msg) yyerror(msg)
#endif

extern int YYPARSE_DECL();

#define SYMBOL_LPAREN 257
#define SYMBOL_RPAREN 258
#define SYMBOL_LBRACKET 259
#define SYMBOL_RBRACKET 260
#define SYMBOL_LBRACE 261
#define SYMBOL_RBRACE 262
#define SYMBOL_COLON 263
#define SYMBOL_DOT 264
#define SYMBOL_SEMICOLON 265
#define SYMBOL_COMMA 266
#define SYMBOL_ASSIGN 267
#define SYMBOL_PLUS 268
#define SYMBOL_MINUS 269
#define SYMBOL_STAR 270
#define SYMBOL_SLASH 271
#define SYMBOL_BACKSLASH 272
#define SYMBOL_EQ 273
#define SYMBOL_NEQ 274
#define SYMBOL_LT 275
#define SYMBOL_LE 276
#define SYMBOL_GT 277
#define SYMBOL_GE 278
#define SYMBOL_LABRACKET 279
#define SYMBOL_RABRACKET 280
#define SYMBOL_QUOTATION 281
#define SYMBOL_COMMENTSTART 282
#define SYMBOL_COMMENTEND 283
#define KEYWORD_IDENTIFIER 284
#define KEYWORD_INTEGER 285
#define KEYWORD_REAL 286
#define KEYWORD_STRING 287
#define KEYWORD_PROGRAM 288
#define KEYWORD_IS 289
#define KEYWORD_BEGIN 290
#define KEYWORD_END 291
#define KEYWORD_VAR 292
#define KEYWORD_TYPE 293
#define KEYWORD_PROCEDURE 294
#define KEYWORD_ARRAY 295
#define KEYWORD_RECORD 296
#define KEYWORD_IN 297
#define KEYWORD_OUT 298
#define KEYWORD_READ 299
#define KEYWORD_WRITE 300
#define KEYWORD_IF 301
#define KEYWORD_THEN 302
#define KEYWORD_ELSE 303
#define KEYWORD_ELSIF 304
#define KEYWORD_WHILE 305
#define KEYWORD_DO 306
#define KEYWORD_LOOP 307
#define KEYWORD_FOR 308
#define KEYWORD_EXIT 309
#define KEYWORD_RETURN 310
#define KEYWORD_TO 311
#define KEYWORD_BY 312
#define KEYWORD_AND 313
#define KEYWORD_OR 314
#define KEYWORD_NOT 315
#define KEYWORD_OF 316
#define KEYWORD_DIV 317
#define KEYWORD_MOD 318
#define TYPE_INTEGER 319
#define TYPE_REAL 320
#define TYPE_STRING 321
#define CONST_INTEGER 322
#define CONST_REAL 323
#define CONST_STRING 324
#define YYERRCODE 256
static const short yylhs[] = {                           -1,
    0,    1,    1,   38,   38,   39,   39,   40,   40,    2,
    2,    3,    3,    4,    4,    4,    5,    5,    6,    7,
    7,    8,    8,    8,    8,    8,    8,    9,    9,   10,
   11,   11,   12,   12,   13,   14,   14,   15,   15,   15,
   15,   15,   15,   15,   15,   15,   15,   15,   16,   16,
   16,   16,   17,   17,   18,   18,   19,   20,   20,   21,
   21,   22,   22,   23,   23,   24,   24,   25,   25,   25,
   25,   25,   25,   25,   25,   25,   26,   26,   27,   27,
   27,   28,   28,   29,   29,   30,   31,   32,   32,   33,
   33,   34,   34,   34,   35,   35,   35,   35,   35,   35,
   35,   35,   35,   35,   35,   35,   35,   35,   36,   36,
   37,   42,   42,   42,   42,   42,   42,   42,   42,   42,
   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
   42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
   42,   42,   42,   42,   42,   42,   41,   41,   41,   41,
   41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
   41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
   41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
   41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
   41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
   41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
   41,
};
static const short yylen[] = {                            2,
    1,    4,    5,    1,    2,    3,    2,    1,    2,    4,
    3,    1,    2,    2,    2,    2,    4,    6,    4,    5,
    7,    1,    1,    1,    1,    3,    3,    1,    2,    4,
    2,    3,    1,    3,    3,    1,    2,    4,    3,    5,
    3,    1,    6,    4,    1,    2,    2,    3,    6,    8,
    7,    9,   10,   12,    1,    2,    4,    2,    3,    1,
    3,    3,    1,    1,    2,    1,    3,    1,    1,    1,
    3,    2,    3,    2,    2,    2,    1,    3,    1,    4,
    3,    3,    2,    1,    3,    5,    3,    1,    3,    1,
    3,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,
};
static const short yydefred[] = {                         0,
    0,    0,    0,    1,    0,    4,  180,  181,  182,  183,
  184,  185,  186,  187,  188,  189,  190,  191,  192,  193,
  194,  195,  196,  197,  198,  199,  200,  201,  202,  203,
    7,  204,  205,  206,  207,  208,  209,  210,  211,  212,
  213,  214,  215,  216,  217,  218,  219,  220,  221,  222,
  223,  224,  225,  226,  227,  228,  229,  230,  231,  232,
  233,  234,  235,  236,  237,  238,  239,  240,  241,  177,
  178,  179,    0,    8,    0,    0,    5,    6,    9,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  111,    0,    0,   42,   45,
    0,    0,   14,    0,    0,   15,    0,   16,    0,    2,
    0,   13,    0,    0,    0,    0,    0,   92,   93,   94,
   68,   69,    0,    0,    0,    0,    0,    0,    0,   46,
   47,    0,   11,   37,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    3,    0,    0,   79,
   58,    0,    0,    0,    0,   41,    0,   95,   96,   97,
   98,  108,  107,  103,  105,  104,  106,    0,  101,  102,
   99,  100,    0,    0,    0,    0,   74,   75,    0,   76,
    0,    0,    0,   48,    0,   81,    0,   83,    0,    0,
   39,    0,    0,   22,   23,   24,    0,   25,    0,  110,
    0,   31,    0,    0,    0,    0,    0,   10,    0,    0,
  115,  116,  117,  118,  119,  120,  121,  122,  123,  124,
  125,  126,  127,  128,  129,  130,  131,  132,  133,  134,
  135,  136,  137,  138,  139,  140,  141,  142,  143,  144,
  145,  146,  147,  148,  149,  150,  151,  152,  153,  154,
  155,  156,  157,  158,  159,  160,  161,  162,  163,  164,
  165,  166,  167,  168,  169,  170,  171,  172,  173,  174,
  175,  176,  112,  113,  114,    0,    0,   59,    0,   71,
    0,    0,    0,    0,    0,    0,    0,    0,   44,    0,
   80,   38,   82,    0,    0,    0,    0,    0,    0,   17,
   19,   32,    0,    0,    0,    0,   40,   78,   62,   65,
   61,    0,    0,    0,    0,    0,    0,    0,   87,    0,
   85,    0,    0,   67,   26,   27,   29,    0,    0,   34,
   35,    0,   20,   49,    0,    0,    0,    0,   56,    0,
    0,   89,   43,    0,    0,   18,    0,    0,    0,   51,
    0,   86,    0,    0,   30,   21,   50,   57,    0,    0,
    0,   52,    0,    0,   53,    0,    0,   54,
};
static const short yydgoto[] = {                          3,
    4,   84,   85,   86,  103,  106,  108,  197,  296,  297,
  145,  203,  204,   97,   98,   99,  100,  315,  316,  116,
  153,  154,  276,  189,  155,  148,  124,  139,  178,  179,
  180,  285,  286,  125,  173,  205,  126,    5,    6,   73,
   74,  277,
};
static const short yysindex[] = {                      -217,
   40, -269,    0,    0, -191,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  108,    0, -140, -259,    0,    0,    0,  613,
 -289, -289, -289, -214, -242, -133, -140, -185, -176, -158,
 -158,  613, -289, -181, -219,    0, -199,  613,    0,    0,
 -212, -141,    0, -136, -142,    0, -160,    0, -125,    0,
  613,    0, -128, -289, -215, -126, -158,    0,    0,    0,
    0,    0,  560, -243, -158, -235,  611, -135, -118,    0,
    0,  402,    0,    0, -158, -289, -158, -182, -110, -173,
 -158, -289, -173, -254, -249, -122,    0,  -96, -145,    0,
    0,  176,  -95,  -94,  714,    0,  -71,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,  613,    0,    0,
    0,    0, -158,  714, -289, -158,    0,    0,  -91,    0,
  613,  -90, -158,    0,  -92,    0,  453,    0,  -88,  534,
    0, -143, -289,    0,    0,    0,  -87,    0,  467,    0,
  -77,    0,  -69,  -73,  -70, -173, -140,    0,  -64, -289,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  -86,  176,    0, -179,    0,
 -246,  714,  -59,  622, -109,  -76,  -67,  -82,    0,  633,
    0,    0,    0, -158, -173,  -81, -289,  -52, -158,    0,
    0,    0, -289, -173,  -93,  -53,    0,    0,    0,    0,
    0,  -51,  613, -158, -262,  -85, -158, -158,    0, -158,
    0,  -49, -158,    0,    0,    0,    0, -173,  481,    0,
    0, -140,    0,    0,  -78,  684,  -47,  613,    0,  347,
  714,    0,    0,  547,  -45,    0,  -38,  -37,  613,    0,
  -62,    0,  613, -158,    0,    0,    0,    0,  -34,  -57,
  697,    0,  -33,  613,    0,  -56,  -28,    0,
};
static const short yyrindex[] = {                         0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,  -50,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0, -230,    0,    0,
    0, -147,    0,    0, -129,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  264,    0,  243,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,  -19,    0,
    0,    0,    0,  -14, -239,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  346,    0,    0,    0,    0,  325,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  -13,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   -9,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  -31,    0,    0,    0,
    0,  389,    0, -256,    0,  -29,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  -39,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0, -209,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 -255,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,
};
static const short yygindex[] = {                         0,
    0,  -79,  168,    0,    0,    0,    0, -137,  -40,    0,
    0,  -42,    0,  -83,    0,    0,    0,  -48,    0,    0,
  -15,    0,  -10,  -23,  -58,   62,  -75,  149,  -11,    0,
    0,  -43,    0,    0,    0,  -74,  -80,    0,  274,    0,
  207,    0,
};
#define YYTABLESIZE 1032
static const short yytable[] = {                        102,
  105,  107,  109,  202,  101,  201,  104,  113,  128,   90,
   91,  102,  129,  206,  134,  135,  101,  102,   63,   75,
  136,  138,  101,   90,   91,  175,   63,  146,  337,   87,
  102,  123,  127,  150,   96,  101,  132,  117,  149,  207,
  338,  117,  151,  176,  312,  131,  135,  111,  118,  119,
  110,  136,  118,  119,  137,  186,  313,  314,  157,  198,
   36,  105,  198,  105,    1,  152,  174,  200,  305,   96,
    2,  114,   36,   36,  117,  188,  185,  117,  187,  190,
  115,   55,  199,  130,  281,  118,  119,  102,  118,  119,
    1,  133,  101,   55,  283,  120,   76,  288,  117,  120,
  102,  152,  121,  122,   96,  101,  121,  122,   96,  118,
  119,   79,  298,  135,  282,  138,   79,  284,  136,   79,
  210,  192,  193,  142,  290,  198,  140,  306,  143,  150,
  141,  144,  120,  109,  149,  120,  147,  109,  156,  121,
  122,   96,  121,  122,   96,  194,  195,  196,  183,   80,
   96,   81,   82,   83,  191,  182,  120,  325,   81,   82,
   83,  209,  278,  121,  122,   96,  331,  291,  208,  293,
  319,  279,  295,  287,  289,  158,  159,  160,  161,  299,
  162,  163,  164,  165,  166,  167,  280,  301,  302,  320,
  345,  303,  304,  175,  309,  332,  158,  159,  160,  161,
  307,  162,  163,  164,  165,  166,  167,  317,  322,  326,
  328,  333,  348,  334,  198,  343,  298,  350,  314,  355,
  169,  170,  105,  198,  171,  172,  356,  357,  359,  335,
  362,  365,  102,  363,  367,  190,  368,  101,   77,   12,
  329,  169,  170,   60,   66,  171,  172,  198,   33,   64,
   88,   28,  347,  112,  351,  336,  327,  102,  340,  341,
  330,  284,  101,  311,  344,  358,  310,  339,  102,  360,
  324,  308,  102,  101,  177,  321,  342,  101,   77,   79,
  366,    0,    0,  102,    0,    0,    0,    0,  101,    0,
    0,    0,    0,    0,    0,  361,    7,    8,    9,   10,
   11,   12,   13,   14,   15,   16,   17,   18,   19,   20,
   21,   22,   23,   24,   25,   26,   27,   28,   29,   30,
    0,    0,   31,   32,   33,   34,   35,   36,   37,   38,
   39,   40,   41,   42,   43,   44,   45,   46,   47,   48,
   49,   50,   51,   52,   53,   54,   55,   56,   57,   58,
   59,   60,   61,   62,   63,   64,   65,   66,   67,   68,
   69,   70,   71,   72,    7,    8,    9,   10,   11,   12,
   13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
   23,   24,   25,   26,   27,   28,   29,   30,    0,    0,
   78,   32,   33,   34,   35,   36,   37,   38,   39,   40,
   41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
   51,   52,   53,   54,   55,   56,   57,   58,   59,   60,
   61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
   71,   72,  211,  212,  213,  214,  215,  216,  217,  218,
  219,  220,  221,  222,  223,  224,  225,  226,  227,  228,
  229,  230,  231,  232,  233,  234,    0,    0,    0,  235,
  236,  237,  238,  239,  240,  241,  242,  243,  244,  245,
  246,  247,  248,  249,  250,  251,  252,  253,  254,  255,
  256,  257,  258,  259,  260,  261,  262,  263,  264,  265,
  266,  267,  268,  269,  270,  271,  272,  273,  274,  275,
   79,   79,   79,    0,   79,    0,   79,   79,   79,    0,
   79,   79,   79,   79,    0,   79,   79,   79,   79,   79,
   79,   70,   79,   70,    0,   70,    0,    0,   70,   70,
    0,   70,   70,   70,   70,    0,   70,   70,   70,   70,
   70,   70,    0,   70,   79,    0,    0,    0,   79,    0,
    0,    0,    0,   79,   79,   79,   79,    0,   79,   79,
   79,    0,    0,    0,    0,   70,    0,    0,    0,   70,
    0,    0,    0,    0,   70,   70,   70,   70,    0,   70,
   70,   70,   84,    0,   84,    0,   84,    0,    0,    0,
   84,    0,   84,   84,   84,   84,    0,   84,   84,   84,
   84,   84,   84,   72,   84,   72,    0,   72,  352,    0,
   72,   72,    0,    0,  158,  159,  160,  161,    0,  162,
  163,  164,  165,  166,  167,   72,   84,    0,    0,    0,
   84,    0,    0,    0,    0,   84,   84,   84,   84,    0,
   84,   84,   84,    0,    0,    0,   73,   72,   73,    0,
   73,   72,    0,   73,   73,    0,   72,   72,    0,  169,
  170,   72,    0,  171,  172,    0,  184,    0,   73,  158,
  159,  160,  161,    0,  162,  163,  164,  165,  166,  167,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
   73,    0,    0,    0,   73,    0,    0,    0,    0,   73,
   73,    0,    0,    0,   73,    0,    0,    0,    0,    0,
    0,    0,    0,    0,  169,  170,    0,  292,  171,  172,
  158,  159,  160,  161,    0,  162,  163,  164,  165,  166,
  167,  300,    0,    0,  158,  159,  160,  161,    0,  162,
  163,  164,  165,  166,  167,  346,    0,    0,  158,  159,
  160,  161,    0,  162,  163,  164,  165,  166,  167,    0,
    0,    0,    0,    0,    0,  169,  170,    0,    0,  171,
  172,    0,    0,    0,    0,    0,    0,    0,    0,  169,
  170,    0,    0,  171,  172,    0,    0,    0,    0,    0,
    0,    0,    0,  169,  170,    0,    0,  171,  172,  294,
    0,  158,  159,  160,  161,    0,  162,  163,  164,  165,
  166,  167,    0,    0,  158,  159,  160,  161,    0,  162,
  163,  164,  165,  166,  167,    0,    0,  158,  159,  160,
  161,    0,  162,  163,  164,  165,  166,  167,    0,    0,
    0,    0,    0,    0,    0,    0,  169,  170,    0,    0,
  171,  172,  353,    0,    0,    0,    0,    0,  354,  169,
  170,  168,    0,  171,  172,    0,    0,    0,    0,    0,
    0,    0,  169,  170,    0,    0,  171,  172,  158,  159,
  160,  161,    0,  162,  163,  164,  165,  166,  167,  158,
  159,  160,  161,    0,  162,  163,  164,  165,  166,  167,
  158,  159,  160,  161,    0,  162,  163,  164,  165,  166,
  167,   88,   89,   90,    0,    0,  181,   91,    0,   92,
   93,   94,   95,  169,  170,    0,    0,  171,  172,    0,
    0,    0,    0,    0,  169,  170,   96,  318,  171,  172,
    0,    0,    0,  323,    0,  169,  170,    0,    0,  171,
  172,  158,  159,  160,  161,    0,  162,  163,  164,  165,
  166,  167,    0,    0,  158,  159,  160,  161,    0,  162,
  163,  164,  165,  166,  167,    0,    0,    0,    0,    0,
    0,  158,  159,  160,  161,  349,  162,  163,  164,  165,
  166,  167,    0,    0,    0,    0,  169,  170,    0,    0,
  171,  172,  364,    0,    0,    0,    0,    0,    0,  169,
  170,    0,    0,  171,  172,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,  169,  170,    0,    0,
  171,  172,
};
static const short yycheck[] = {                         80,
   81,   82,   83,  258,   80,  143,   81,   87,   92,  266,
  266,   92,   93,  263,   98,  259,   92,   98,  258,  289,
  264,  257,   98,  280,  280,  261,  266,  111,  291,  289,
  111,   90,   91,  114,  324,  111,   95,  257,  114,  289,
  303,  257,  258,  279,  291,  265,  259,  290,  268,  269,
  265,  264,  268,  269,  267,  136,  303,  304,  117,  140,
  291,  142,  143,  144,  282,  281,  125,  142,  206,  324,
  288,  257,  303,  304,  257,  258,  135,  257,  137,  138,
  257,  291,  141,  265,  168,  268,  269,  168,  268,  269,
  282,  291,  168,  303,  175,  315,  288,  181,  257,  315,
  181,  281,  322,  323,  324,  181,  322,  323,  324,  268,
  269,  259,  193,  259,  173,  257,  264,  176,  264,  267,
  266,  295,  296,  266,  183,  206,  263,  207,  289,  210,
  267,  257,  315,  263,  210,  315,  265,  267,  265,  322,
  323,  324,  322,  323,  324,  319,  320,  321,  267,  290,
  324,  292,  293,  294,  265,  291,  315,  295,  292,  293,
  294,  258,  258,  322,  323,  324,  304,  260,  291,  258,
  280,  266,  316,  265,  265,  268,  269,  270,  271,  267,
  273,  274,  275,  276,  277,  278,  258,  265,  258,  266,
  328,  265,  263,  261,  281,  289,  268,  269,  270,  271,
  265,  273,  274,  275,  276,  277,  278,  267,  291,  291,
  263,  265,  291,  265,  295,  265,  297,  265,  304,  265,
  313,  314,  303,  304,  317,  318,  265,  265,  291,  313,
  265,  265,  313,  291,  291,  294,  265,  313,  258,  290,
  299,  313,  314,  258,  258,  317,  318,  328,  258,  281,
  280,  291,  332,   86,  338,  314,  297,  338,  317,  318,
  303,  320,  338,  279,  323,  349,  277,  316,  349,  353,
  294,  210,  353,  349,  126,  287,  320,  353,    5,   73,
  364,   -1,   -1,  364,   -1,   -1,   -1,   -1,  364,   -1,
   -1,   -1,   -1,   -1,   -1,  354,  257,  258,  259,  260,
  261,  262,  263,  264,  265,  266,  267,  268,  269,  270,
  271,  272,  273,  274,  275,  276,  277,  278,  279,  280,
   -1,   -1,  283,  284,  285,  286,  287,  288,  289,  290,
  291,  292,  293,  294,  295,  296,  297,  298,  299,  300,
  301,  302,  303,  304,  305,  306,  307,  308,  309,  310,
  311,  312,  313,  314,  315,  316,  317,  318,  319,  320,
  321,  322,  323,  324,  257,  258,  259,  260,  261,  262,
  263,  264,  265,  266,  267,  268,  269,  270,  271,  272,
  273,  274,  275,  276,  277,  278,  279,  280,   -1,   -1,
  283,  284,  285,  286,  287,  288,  289,  290,  291,  292,
  293,  294,  295,  296,  297,  298,  299,  300,  301,  302,
  303,  304,  305,  306,  307,  308,  309,  310,  311,  312,
  313,  314,  315,  316,  317,  318,  319,  320,  321,  322,
  323,  324,  257,  258,  259,  260,  261,  262,  263,  264,
  265,  266,  267,  268,  269,  270,  271,  272,  273,  274,
  275,  276,  277,  278,  279,  280,   -1,   -1,   -1,  284,
  285,  286,  287,  288,  289,  290,  291,  292,  293,  294,
  295,  296,  297,  298,  299,  300,  301,  302,  303,  304,
  305,  306,  307,  308,  309,  310,  311,  312,  313,  314,
  315,  316,  317,  318,  319,  320,  321,  322,  323,  324,
  258,  259,  260,   -1,  262,   -1,  264,  265,  266,   -1,
  268,  269,  270,  271,   -1,  273,  274,  275,  276,  277,
  278,  258,  280,  260,   -1,  262,   -1,   -1,  265,  266,
   -1,  268,  269,  270,  271,   -1,  273,  274,  275,  276,
  277,  278,   -1,  280,  302,   -1,   -1,   -1,  306,   -1,
   -1,   -1,   -1,  311,  312,  313,  314,   -1,  316,  317,
  318,   -1,   -1,   -1,   -1,  302,   -1,   -1,   -1,  306,
   -1,   -1,   -1,   -1,  311,  312,  313,  314,   -1,  316,
  317,  318,  258,   -1,  260,   -1,  262,   -1,   -1,   -1,
  266,   -1,  268,  269,  270,  271,   -1,  273,  274,  275,
  276,  277,  278,  258,  280,  260,   -1,  262,  262,   -1,
  265,  266,   -1,   -1,  268,  269,  270,  271,   -1,  273,
  274,  275,  276,  277,  278,  280,  302,   -1,   -1,   -1,
  306,   -1,   -1,   -1,   -1,  311,  312,  313,  314,   -1,
  316,  317,  318,   -1,   -1,   -1,  258,  302,  260,   -1,
  262,  306,   -1,  265,  266,   -1,  311,  312,   -1,  313,
  314,  316,   -1,  317,  318,   -1,  265,   -1,  280,  268,
  269,  270,  271,   -1,  273,  274,  275,  276,  277,  278,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  302,   -1,   -1,   -1,  306,   -1,   -1,   -1,   -1,  311,
  312,   -1,   -1,   -1,  316,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  313,  314,   -1,  265,  317,  318,
  268,  269,  270,  271,   -1,  273,  274,  275,  276,  277,
  278,  265,   -1,   -1,  268,  269,  270,  271,   -1,  273,
  274,  275,  276,  277,  278,  265,   -1,   -1,  268,  269,
  270,  271,   -1,  273,  274,  275,  276,  277,  278,   -1,
   -1,   -1,   -1,   -1,   -1,  313,  314,   -1,   -1,  317,
  318,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  313,
  314,   -1,   -1,  317,  318,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  313,  314,   -1,   -1,  317,  318,  266,
   -1,  268,  269,  270,  271,   -1,  273,  274,  275,  276,
  277,  278,   -1,   -1,  268,  269,  270,  271,   -1,  273,
  274,  275,  276,  277,  278,   -1,   -1,  268,  269,  270,
  271,   -1,  273,  274,  275,  276,  277,  278,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  313,  314,   -1,   -1,
  317,  318,  306,   -1,   -1,   -1,   -1,   -1,  312,  313,
  314,  302,   -1,  317,  318,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  313,  314,   -1,   -1,  317,  318,  268,  269,
  270,  271,   -1,  273,  274,  275,  276,  277,  278,  268,
  269,  270,  271,   -1,  273,  274,  275,  276,  277,  278,
  268,  269,  270,  271,   -1,  273,  274,  275,  276,  277,
  278,  299,  300,  301,   -1,   -1,  306,  305,   -1,  307,
  308,  309,  310,  313,  314,   -1,   -1,  317,  318,   -1,
   -1,   -1,   -1,   -1,  313,  314,  324,  316,  317,  318,
   -1,   -1,   -1,  311,   -1,  313,  314,   -1,   -1,  317,
  318,  268,  269,  270,  271,   -1,  273,  274,  275,  276,
  277,  278,   -1,   -1,  268,  269,  270,  271,   -1,  273,
  274,  275,  276,  277,  278,   -1,   -1,   -1,   -1,   -1,
   -1,  268,  269,  270,  271,  302,  273,  274,  275,  276,
  277,  278,   -1,   -1,   -1,   -1,  313,  314,   -1,   -1,
  317,  318,  306,   -1,   -1,   -1,   -1,   -1,   -1,  313,
  314,   -1,   -1,  317,  318,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  313,  314,   -1,   -1,
  317,  318,
};
#define YYFINAL 3
#ifndef YYDEBUG
#define YYDEBUG 0
#endif
#define YYMAXTOKEN 324
#if YYDEBUG
static const char *yyname[] = {

"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"SYMBOL_LPAREN","SYMBOL_RPAREN",
"SYMBOL_LBRACKET","SYMBOL_RBRACKET","SYMBOL_LBRACE","SYMBOL_RBRACE",
"SYMBOL_COLON","SYMBOL_DOT","SYMBOL_SEMICOLON","SYMBOL_COMMA","SYMBOL_ASSIGN",
"SYMBOL_PLUS","SYMBOL_MINUS","SYMBOL_STAR","SYMBOL_SLASH","SYMBOL_BACKSLASH",
"SYMBOL_EQ","SYMBOL_NEQ","SYMBOL_LT","SYMBOL_LE","SYMBOL_GT","SYMBOL_GE",
"SYMBOL_LABRACKET","SYMBOL_RABRACKET","SYMBOL_QUOTATION","SYMBOL_COMMENTSTART",
"SYMBOL_COMMENTEND","KEYWORD_IDENTIFIER","KEYWORD_INTEGER","KEYWORD_REAL",
"KEYWORD_STRING","KEYWORD_PROGRAM","KEYWORD_IS","KEYWORD_BEGIN","KEYWORD_END",
"KEYWORD_VAR","KEYWORD_TYPE","KEYWORD_PROCEDURE","KEYWORD_ARRAY",
"KEYWORD_RECORD","KEYWORD_IN","KEYWORD_OUT","KEYWORD_READ","KEYWORD_WRITE",
"KEYWORD_IF","KEYWORD_THEN","KEYWORD_ELSE","KEYWORD_ELSIF","KEYWORD_WHILE",
"KEYWORD_DO","KEYWORD_LOOP","KEYWORD_FOR","KEYWORD_EXIT","KEYWORD_RETURN",
"KEYWORD_TO","KEYWORD_BY","KEYWORD_AND","KEYWORD_OR","KEYWORD_NOT","KEYWORD_OF",
"KEYWORD_DIV","KEYWORD_MOD","TYPE_INTEGER","TYPE_REAL","TYPE_STRING",
"CONST_INTEGER","CONST_REAL","CONST_STRING",
};
static const char *yyrule[] = {
"$accept : start",
"start : program",
"program : KEYWORD_PROGRAM KEYWORD_IS Body SYMBOL_SEMICOLON",
"program : Comments KEYWORD_PROGRAM KEYWORD_IS Body SYMBOL_SEMICOLON",
"Comments : Comment",
"Comments : Comments Comment",
"Comment : SYMBOL_COMMENTSTART CommentContents SYMBOL_COMMENTEND",
"Comment : SYMBOL_COMMENTSTART SYMBOL_COMMENTEND",
"CommentContents : CommentContent",
"CommentContents : CommentContents CommentContent",
"Body : Declarations KEYWORD_BEGIN Statements KEYWORD_END",
"Body : KEYWORD_BEGIN Statements KEYWORD_END",
"Declarations : Declaration",
"Declarations : Declaration Declarations",
"Declaration : KEYWORD_VAR VariableDeclaration",
"Declaration : KEYWORD_TYPE TypeDeclaration",
"Declaration : KEYWORD_PROCEDURE ProcedureDeclaration",
"VariableDeclaration : Identifiers SYMBOL_ASSIGN Expression SYMBOL_SEMICOLON",
"VariableDeclaration : Identifiers SYMBOL_COLON Type SYMBOL_ASSIGN Expression SYMBOL_SEMICOLON",
"TypeDeclaration : Identifier KEYWORD_IS Type SYMBOL_SEMICOLON",
"ProcedureDeclaration : Identifier FormalParameters KEYWORD_IS Body SYMBOL_SEMICOLON",
"ProcedureDeclaration : Identifier FormalParameters SYMBOL_COLON Type KEYWORD_IS Body SYMBOL_SEMICOLON",
"Type : TYPE_INTEGER",
"Type : TYPE_REAL",
"Type : TYPE_STRING",
"Type : Identifier",
"Type : KEYWORD_ARRAY KEYWORD_OF Type",
"Type : KEYWORD_RECORD Components KEYWORD_END",
"Components : Component",
"Components : Component Components",
"Component : Identifier SYMBOL_COLON Type SYMBOL_SEMICOLON",
"FormalParameters : SYMBOL_LPAREN SYMBOL_RPAREN",
"FormalParameters : SYMBOL_LPAREN FunctionParameterSections SYMBOL_RPAREN",
"FunctionParameterSections : FunctionParameterSection",
"FunctionParameterSections : FunctionParameterSection SYMBOL_SEMICOLON FunctionParameterSections",
"FunctionParameterSection : Identifiers SYMBOL_COLON Type",
"Statements : Statement",
"Statements : Statement Statements",
"Statement : LeftValue SYMBOL_ASSIGN Expression SYMBOL_SEMICOLON",
"Statement : Identifier ActualParameters SYMBOL_SEMICOLON",
"Statement : KEYWORD_READ SYMBOL_LPAREN LeftValues SYMBOL_RPAREN SYMBOL_SEMICOLON",
"Statement : KEYWORD_WRITE WriteParameters SYMBOL_SEMICOLON",
"Statement : IfStatement",
"Statement : KEYWORD_WHILE Expression KEYWORD_DO Statements KEYWORD_END SYMBOL_SEMICOLON",
"Statement : KEYWORD_LOOP Statements KEYWORD_END SYMBOL_SEMICOLON",
"Statement : ForStatement",
"Statement : KEYWORD_EXIT SYMBOL_SEMICOLON",
"Statement : KEYWORD_RETURN SYMBOL_SEMICOLON",
"Statement : KEYWORD_RETURN Expression SYMBOL_SEMICOLON",
"IfStatement : KEYWORD_IF Expression KEYWORD_THEN Statements KEYWORD_END SYMBOL_SEMICOLON",
"IfStatement : KEYWORD_IF Expression KEYWORD_THEN Statements KEYWORD_ELSE Statements KEYWORD_END SYMBOL_SEMICOLON",
"IfStatement : KEYWORD_IF Expression KEYWORD_THEN Statements ElsifStatements KEYWORD_END SYMBOL_SEMICOLON",
"IfStatement : KEYWORD_IF Expression KEYWORD_THEN Statements ElsifStatements KEYWORD_ELSE Statements KEYWORD_END SYMBOL_SEMICOLON",
"ForStatement : KEYWORD_FOR Identifier SYMBOL_ASSIGN Expression KEYWORD_TO Expression KEYWORD_DO Statements KEYWORD_END SYMBOL_SEMICOLON",
"ForStatement : KEYWORD_FOR Identifier SYMBOL_ASSIGN Expression KEYWORD_TO Expression KEYWORD_BY Expression KEYWORD_DO Statements KEYWORD_END SYMBOL_SEMICOLON",
"ElsifStatements : ElsifStatement",
"ElsifStatements : ElsifStatement ElsifStatements",
"ElsifStatement : KEYWORD_ELSIF Expression KEYWORD_THEN Statements",
"WriteParameters : SYMBOL_LPAREN SYMBOL_RPAREN",
"WriteParameters : SYMBOL_LPAREN WriteExpressions SYMBOL_RPAREN",
"WriteExpressions : WriteExpression",
"WriteExpressions : WriteExpression SYMBOL_COMMA WriteExpressions",
"WriteExpression : SYMBOL_QUOTATION WriteContents SYMBOL_QUOTATION",
"WriteExpression : Expression",
"WriteContents : WriteContent",
"WriteContents : WriteContent WriteContents",
"Expressions : Expression",
"Expressions : Expression SYMBOL_COMMA Expressions",
"Expression : CONST_INTEGER",
"Expression : CONST_REAL",
"Expression : LeftValue",
"Expression : SYMBOL_LPAREN Expression SYMBOL_RPAREN",
"Expression : UnaryOperation Expression",
"Expression : Expression BinaryOperation Expression",
"Expression : Identifier ActualParameters",
"Expression : Identifier CompleteValues",
"Expression : Identifier Array",
"LeftValues : LeftValue",
"LeftValues : LeftValue SYMBOL_COMMA LeftValues",
"LeftValue : Identifier",
"LeftValue : LeftValue SYMBOL_LBRACKET Expression SYMBOL_RBRACKET",
"LeftValue : LeftValue SYMBOL_DOT Identifier",
"ActualParameters : SYMBOL_LPAREN Expressions SYMBOL_RPAREN",
"ActualParameters : SYMBOL_LPAREN SYMBOL_RPAREN",
"CompleteValues : CompleteValue",
"CompleteValues : CompleteValue SYMBOL_SEMICOLON CompleteValues",
"CompleteValue : SYMBOL_LBRACE Identifier SYMBOL_ASSIGN Expression SYMBOL_RBRACE",
"Array : SYMBOL_LABRACKET ArrayValues SYMBOL_RABRACKET",
"ArrayValues : ArrayValue",
"ArrayValues : ArrayValue SYMBOL_COMMA ArrayValues",
"ArrayValue : Expression",
"ArrayValue : Expression KEYWORD_OF Expression",
"UnaryOperation : SYMBOL_PLUS",
"UnaryOperation : SYMBOL_MINUS",
"UnaryOperation : KEYWORD_NOT",
"BinaryOperation : SYMBOL_PLUS",
"BinaryOperation : SYMBOL_MINUS",
"BinaryOperation : SYMBOL_STAR",
"BinaryOperation : SYMBOL_SLASH",
"BinaryOperation : KEYWORD_DIV",
"BinaryOperation : KEYWORD_MOD",
"BinaryOperation : KEYWORD_AND",
"BinaryOperation : KEYWORD_OR",
"BinaryOperation : SYMBOL_LT",
"BinaryOperation : SYMBOL_GT",
"BinaryOperation : SYMBOL_LE",
"BinaryOperation : SYMBOL_GE",
"BinaryOperation : SYMBOL_NEQ",
"BinaryOperation : SYMBOL_EQ",
"Identifiers : Identifier",
"Identifiers : Identifier SYMBOL_COMMA Identifiers",
"Identifier : CONST_STRING",
"WriteContent : CONST_INTEGER",
"WriteContent : CONST_REAL",
"WriteContent : CONST_STRING",
"WriteContent : SYMBOL_LPAREN",
"WriteContent : SYMBOL_RPAREN",
"WriteContent : SYMBOL_LBRACKET",
"WriteContent : SYMBOL_RBRACKET",
"WriteContent : SYMBOL_LBRACE",
"WriteContent : SYMBOL_RBRACE",
"WriteContent : SYMBOL_COLON",
"WriteContent : SYMBOL_DOT",
"WriteContent : SYMBOL_SEMICOLON",
"WriteContent : SYMBOL_COMMA",
"WriteContent : SYMBOL_ASSIGN",
"WriteContent : SYMBOL_PLUS",
"WriteContent : SYMBOL_MINUS",
"WriteContent : SYMBOL_STAR",
"WriteContent : SYMBOL_SLASH",
"WriteContent : SYMBOL_BACKSLASH",
"WriteContent : SYMBOL_EQ",
"WriteContent : SYMBOL_NEQ",
"WriteContent : SYMBOL_LT",
"WriteContent : SYMBOL_LE",
"WriteContent : SYMBOL_GT",
"WriteContent : SYMBOL_GE",
"WriteContent : SYMBOL_LABRACKET",
"WriteContent : SYMBOL_RABRACKET",
"WriteContent : KEYWORD_IDENTIFIER",
"WriteContent : KEYWORD_INTEGER",
"WriteContent : KEYWORD_REAL",
"WriteContent : KEYWORD_STRING",
"WriteContent : KEYWORD_PROGRAM",
"WriteContent : KEYWORD_IS",
"WriteContent : KEYWORD_BEGIN",
"WriteContent : KEYWORD_END",
"WriteContent : KEYWORD_VAR",
"WriteContent : KEYWORD_TYPE",
"WriteContent : KEYWORD_PROCEDURE",
"WriteContent : KEYWORD_ARRAY",
"WriteContent : KEYWORD_RECORD",
"WriteContent : KEYWORD_IN",
"WriteContent : KEYWORD_OUT",
"WriteContent : KEYWORD_READ",
"WriteContent : KEYWORD_WRITE",
"WriteContent : KEYWORD_IF",
"WriteContent : KEYWORD_THEN",
"WriteContent : KEYWORD_ELSE",
"WriteContent : KEYWORD_ELSIF",
"WriteContent : KEYWORD_WHILE",
"WriteContent : KEYWORD_DO",
"WriteContent : KEYWORD_LOOP",
"WriteContent : KEYWORD_FOR",
"WriteContent : KEYWORD_EXIT",
"WriteContent : KEYWORD_RETURN",
"WriteContent : KEYWORD_TO",
"WriteContent : KEYWORD_BY",
"WriteContent : KEYWORD_AND",
"WriteContent : KEYWORD_OR",
"WriteContent : KEYWORD_NOT",
"WriteContent : KEYWORD_OF",
"WriteContent : KEYWORD_DIV",
"WriteContent : KEYWORD_MOD",
"WriteContent : TYPE_INTEGER",
"WriteContent : TYPE_REAL",
"WriteContent : TYPE_STRING",
"CommentContent : CONST_INTEGER",
"CommentContent : CONST_REAL",
"CommentContent : CONST_STRING",
"CommentContent : SYMBOL_LPAREN",
"CommentContent : SYMBOL_RPAREN",
"CommentContent : SYMBOL_LBRACKET",
"CommentContent : SYMBOL_RBRACKET",
"CommentContent : SYMBOL_LBRACE",
"CommentContent : SYMBOL_RBRACE",
"CommentContent : SYMBOL_COLON",
"CommentContent : SYMBOL_DOT",
"CommentContent : SYMBOL_SEMICOLON",
"CommentContent : SYMBOL_COMMA",
"CommentContent : SYMBOL_ASSIGN",
"CommentContent : SYMBOL_PLUS",
"CommentContent : SYMBOL_MINUS",
"CommentContent : SYMBOL_STAR",
"CommentContent : SYMBOL_SLASH",
"CommentContent : SYMBOL_BACKSLASH",
"CommentContent : SYMBOL_EQ",
"CommentContent : SYMBOL_NEQ",
"CommentContent : SYMBOL_LT",
"CommentContent : SYMBOL_LE",
"CommentContent : SYMBOL_GT",
"CommentContent : SYMBOL_GE",
"CommentContent : SYMBOL_LABRACKET",
"CommentContent : SYMBOL_RABRACKET",
"CommentContent : KEYWORD_IDENTIFIER",
"CommentContent : KEYWORD_INTEGER",
"CommentContent : KEYWORD_REAL",
"CommentContent : KEYWORD_STRING",
"CommentContent : KEYWORD_PROGRAM",
"CommentContent : KEYWORD_IS",
"CommentContent : KEYWORD_BEGIN",
"CommentContent : KEYWORD_END",
"CommentContent : KEYWORD_VAR",
"CommentContent : KEYWORD_TYPE",
"CommentContent : KEYWORD_PROCEDURE",
"CommentContent : KEYWORD_ARRAY",
"CommentContent : KEYWORD_RECORD",
"CommentContent : KEYWORD_IN",
"CommentContent : KEYWORD_OUT",
"CommentContent : KEYWORD_READ",
"CommentContent : KEYWORD_WRITE",
"CommentContent : KEYWORD_IF",
"CommentContent : KEYWORD_THEN",
"CommentContent : KEYWORD_ELSE",
"CommentContent : KEYWORD_ELSIF",
"CommentContent : KEYWORD_WHILE",
"CommentContent : KEYWORD_DO",
"CommentContent : KEYWORD_LOOP",
"CommentContent : KEYWORD_FOR",
"CommentContent : KEYWORD_EXIT",
"CommentContent : KEYWORD_RETURN",
"CommentContent : KEYWORD_TO",
"CommentContent : KEYWORD_BY",
"CommentContent : KEYWORD_AND",
"CommentContent : KEYWORD_OR",
"CommentContent : KEYWORD_NOT",
"CommentContent : KEYWORD_OF",
"CommentContent : KEYWORD_DIV",
"CommentContent : KEYWORD_MOD",
"CommentContent : TYPE_INTEGER",
"CommentContent : TYPE_REAL",
"CommentContent : TYPE_STRING",

};
#endif

int      yydebug;
int      yynerrs;

int      yyerrflag;
int      yychar;
YYSTYPE  yyval;
YYSTYPE  yylval;

/* define the initial stack-sizes */
#ifdef YYSTACKSIZE
#undef YYMAXDEPTH
#define YYMAXDEPTH  YYSTACKSIZE
#else
#ifdef YYMAXDEPTH
#define YYSTACKSIZE YYMAXDEPTH
#else
#define YYSTACKSIZE 10000
#define YYMAXDEPTH  500
#endif
#endif

#define YYINITSTACKSIZE 500

typedef struct {
    unsigned stacksize;
    short    *s_base;
    short    *s_mark;
    short    *s_last;
    YYSTYPE  *l_base;
    YYSTYPE  *l_mark;
} YYSTACKDATA;
/* variables for the parser stack */
static YYSTACKDATA yystack;

#if YYDEBUG
#include <stdio.h>		/* needed for printf */
#endif

#include <stdlib.h>	/* needed for malloc, etc */
#include <string.h>	/* needed for memset */

/* allocate initial stack or double stack size, up to YYMAXDEPTH */
static int yygrowstack(YYSTACKDATA *data)
{
    int i;
    unsigned newsize;
    short *newss;
    YYSTYPE *newvs;

    if ((newsize = data->stacksize) == 0)
        newsize = YYINITSTACKSIZE;
    else if (newsize >= YYMAXDEPTH)
        return -1;
    else if ((newsize *= 2) > YYMAXDEPTH)
        newsize = YYMAXDEPTH;

    i = (int) (data->s_mark - data->s_base);
    newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
    if (newss == 0)
        return -1;

    data->s_base = newss;
    data->s_mark = newss + i;

    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
    if (newvs == 0)
        return -1;

    data->l_base = newvs;
    data->l_mark = newvs + i;

    data->stacksize = newsize;
    data->s_last = data->s_base + newsize - 1;
    return 0;
}

#if YYPURE || defined(YY_NO_LEAKS)
static void yyfreestack(YYSTACKDATA *data)
{
    free(data->s_base);
    free(data->l_base);
    memset(data, 0, sizeof(*data));
}
#else
#define yyfreestack(data) /* nothing */
#endif

#define YYABORT  goto yyabort
#define YYREJECT goto yyabort
#define YYACCEPT goto yyaccept
#define YYERROR  goto yyerrlab

int
YYPARSE_DECL()
{
    int yym, yyn, yystate;
#if YYDEBUG
    const char *yys;

    if ((yys = getenv("YYDEBUG")) != 0)
    {
        yyn = *yys;
        if (yyn >= '0' && yyn <= '9')
            yydebug = yyn - '0';
    }
#endif

    yynerrs = 0;
    yyerrflag = 0;
    yychar = YYEMPTY;
    yystate = 0;

#if YYPURE
    memset(&yystack, 0, sizeof(yystack));
#endif

    if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
    yystack.s_mark = yystack.s_base;
    yystack.l_mark = yystack.l_base;
    yystate = 0;
    *yystack.s_mark = 0;

yyloop:
    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
    if (yychar < 0)
    {
        if ((yychar = YYLEX) < 0) yychar = 0;
#if YYDEBUG
        if (yydebug)
        {
            yys = 0;
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
            if (!yys) yys = "illegal-symbol";
            printf("%sdebug: state %d, reading %d (%s)\n",
                    YYPREFIX, yystate, yychar, yys);
        }
#endif
    }
    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    {
#if YYDEBUG
        if (yydebug)
            printf("%sdebug: state %d, shifting to state %d\n",
                    YYPREFIX, yystate, yytable[yyn]);
#endif
        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
        {
            goto yyoverflow;
        }
        yystate = yytable[yyn];
        *++yystack.s_mark = yytable[yyn];
        *++yystack.l_mark = yylval;
        yychar = YYEMPTY;
        if (yyerrflag > 0)  --yyerrflag;
        goto yyloop;
    }
    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    {
        yyn = yytable[yyn];
        goto yyreduce;
    }
    if (yyerrflag) goto yyinrecovery;

    yyerror("syntax error");

    goto yyerrlab;

yyerrlab:
    ++yynerrs;

yyinrecovery:
    if (yyerrflag < 3)
    {
        yyerrflag = 3;
        for (;;)
        {
            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
            {
#if YYDEBUG
                if (yydebug)
                    printf("%sdebug: state %d, error recovery shifting\
 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
#endif
                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
                {
                    goto yyoverflow;
                }
                yystate = yytable[yyn];
                *++yystack.s_mark = yytable[yyn];
                *++yystack.l_mark = yylval;
                goto yyloop;
            }
            else
            {
#if YYDEBUG
                if (yydebug)
                    printf("%sdebug: error recovery discarding state %d\n",
                            YYPREFIX, *yystack.s_mark);
#endif
                if (yystack.s_mark <= yystack.s_base) goto yyabort;
                --yystack.s_mark;
                --yystack.l_mark;
            }
        }
    }
    else
    {
        if (yychar == 0) goto yyabort;
#if YYDEBUG
        if (yydebug)
        {
            yys = 0;
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
            if (!yys) yys = "illegal-symbol";
            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
                    YYPREFIX, yystate, yychar, yys);
        }
#endif
        yychar = YYEMPTY;
        goto yyloop;
    }

yyreduce:
#if YYDEBUG
    if (yydebug)
        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
                YYPREFIX, yystate, yyn, yyrule[yyn]);
#endif
    yym = yylen[yyn];
    if (yym)
        yyval = yystack.l_mark[1-yym];
    else
        memset(&yyval, 0, sizeof yyval);
    switch (yyn)
    {
case 1:
#line 87 "pcat.y"
	{ Run(yystack.l_mark[0].Tast,0); }
break;
case 2:
#line 91 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);yyval.Tast=mk_node(program,temp);}
break;
case 3:
#line 92 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);yyval.Tast=mk_node(program,temp);}
break;
case 4:
#line 95 "pcat.y"
	{;}
break;
case 5:
#line 96 "pcat.y"
	{;}
break;
case 6:
#line 99 "pcat.y"
	{;}
break;
case 7:
#line 100 "pcat.y"
	{;}
break;
case 8:
#line 103 "pcat.y"
	{;}
break;
case 9:
#line 104 "pcat.y"
	{;}
break;
case 10:
#line 107 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);temp=cons(yystack.l_mark[-3].Tast,temp);yyval.Tast=mk_node(Body,temp);}
break;
case 11:
#line 108 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);yyval.Tast=mk_node(Body,temp);}
break;
case 12:
#line 111 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(Declarations,temp);}
break;
case 13:
#line 112 "pcat.y"
	{yystack.l_mark[0].Tast->info.node.arguments=cons(yystack.l_mark[-1].Tast,yystack.l_mark[0].Tast->info.node.arguments);yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 14:
#line 115 "pcat.y"
	{yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 15:
#line 116 "pcat.y"
	{yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 16:
#line 117 "pcat.y"
	{yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 17:
#line 120 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);temp=cons(yystack.l_mark[-3].Tast,temp);yyval.Tast=mk_node(VariableDeclaration,temp);}
break;
case 18:
#line 121 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);temp=cons(yystack.l_mark[-3].Tast,temp);temp=cons(yystack.l_mark[-5].Tast,temp);yyval.Tast=mk_node(VariableDeclaration,temp);}
break;
case 19:
#line 124 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);cons(yystack.l_mark[-3].Tast,temp);yyval.Tast=mk_node(TypeDeclaration,temp);}
break;
case 20:
#line 127 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);temp=cons(yystack.l_mark[-3].Tast,temp);temp=cons(yystack.l_mark[-4].Tast,temp);yyval.Tast=mk_node(ProcedureDeclaration,temp);}
break;
case 21:
#line 128 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);temp=cons(yystack.l_mark[-3].Tast,temp);temp=cons(yystack.l_mark[-5].Tast,temp);temp=cons(yystack.l_mark[-6].Tast,temp);yyval.Tast=mk_node(ProcedureDeclaration,temp);}
break;
case 22:
#line 131 "pcat.y"
	{yyval.Tast=mk_str(yytext);}
break;
case 23:
#line 132 "pcat.y"
	{yyval.Tast=mk_str(yytext);}
break;
case 24:
#line 133 "pcat.y"
	{yyval.Tast=mk_str(yytext);}
break;
case 25:
#line 134 "pcat.y"
	{yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 26:
#line 135 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(ArrayType,temp);}
break;
case 27:
#line 136 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);yyval.Tast=mk_node(RecordType,temp);}
break;
case 28:
#line 139 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(Components,temp);}
break;
case 29:
#line 140 "pcat.y"
	{yystack.l_mark[0].Tast->info.node.arguments=cons(yystack.l_mark[-1].Tast,yystack.l_mark[0].Tast->info.node.arguments);yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 30:
#line 143 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);temp=cons(yystack.l_mark[-3].Tast,temp);yyval.Tast=mk_node(Component,temp);}
break;
case 31:
#line 146 "pcat.y"
	{yyval.Tast=mk_node(FormalParameters,NULL);}
break;
case 32:
#line 147 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);yyval.Tast=mk_node(FormalParameters,temp);}
break;
case 33:
#line 150 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(FunctionParameterSections,temp);}
break;
case 34:
#line 151 "pcat.y"
	{yystack.l_mark[0].Tast->info.node.arguments=cons(yystack.l_mark[-2].Tast,yystack.l_mark[0].Tast->info.node.arguments);yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 35:
#line 154 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);temp=cons(yystack.l_mark[-2].Tast,temp);yyval.Tast=mk_node(FunctionParameterSection,temp);}
break;
case 36:
#line 157 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(Statements,temp);}
break;
case 37:
#line 158 "pcat.y"
	{yystack.l_mark[0].Tast->info.node.arguments=cons(yystack.l_mark[-1].Tast,yystack.l_mark[0].Tast->info.node.arguments);yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 38:
#line 161 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);temp=cons(yystack.l_mark[-3].Tast,temp);yyval.Tast=mk_node(AssignmentStatement,temp);}
break;
case 39:
#line 162 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);temp=cons(yystack.l_mark[-2].Tast,temp);yyval.Tast=mk_node(ProcedureCallStatement,temp);}
break;
case 40:
#line 163 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-2].Tast,NULL);yyval.Tast=mk_node(ReadStatement,temp);}
break;
case 41:
#line 164 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);yyval.Tast=mk_node(WriteStatement,temp);}
break;
case 42:
#line 165 "pcat.y"
	{yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 43:
#line 166 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-2].Tast,NULL);cons(yystack.l_mark[-4].Tast,temp);yyval.Tast=mk_node(WhileStatement,temp);}
break;
case 44:
#line 167 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-2].Tast,NULL);yyval.Tast=mk_node(LoopStatement,temp);}
break;
case 45:
#line 168 "pcat.y"
	{yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 46:
#line 169 "pcat.y"
	{yyval.Tast=mk_node(ExitStatement,NULL);}
break;
case 47:
#line 170 "pcat.y"
	{yyval.Tast=mk_node(ReturnStatement,NULL);}
break;
case 48:
#line 171 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);yyval.Tast=mk_node(ReturnStatement,temp);}
break;
case 49:
#line 174 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-2].Tast,NULL);temp=cons(yystack.l_mark[-4].Tast,temp);yyval.Tast=mk_node(IfStatement,temp);}
break;
case 50:
#line 175 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-2].Tast,NULL);temp=cons(yystack.l_mark[-4].Tast,temp);temp=cons(yystack.l_mark[-6].Tast,temp);yyval.Tast=mk_node(IfStatement,temp);}
break;
case 51:
#line 176 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-2].Tast,NULL);temp=cons(yystack.l_mark[-3].Tast,temp);temp=cons(yystack.l_mark[-5].Tast,temp);yyval.Tast=mk_node(IfStatement,temp);}
break;
case 52:
#line 177 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-2].Tast,temp);temp=cons(yystack.l_mark[-4].Tast,temp);temp=cons(yystack.l_mark[-5].Tast,temp);temp=cons(yystack.l_mark[-7].Tast,temp);yyval.Tast=mk_node(IfStatement,temp);}
break;
case 53:
#line 180 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-2].Tast,NULL);temp=cons(yystack.l_mark[-4].Tast,temp);temp=cons(yystack.l_mark[-6].Tast,temp);temp=cons(yystack.l_mark[-8].Tast,temp);yyval.Tast=mk_node(ForStatement,temp);}
break;
case 54:
#line 181 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-2].Tast,NULL);temp=cons(yystack.l_mark[-4].Tast,temp);temp=cons(yystack.l_mark[-6].Tast,temp);temp=cons(yystack.l_mark[-8].Tast,temp);temp=cons(yystack.l_mark[-10].Tast,temp);yyval.Tast=mk_node(ForStatement,temp);}
break;
case 55:
#line 184 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(ElsifStatements,temp);}
break;
case 56:
#line 185 "pcat.y"
	{yystack.l_mark[0].Tast->info.node.arguments=cons(yystack.l_mark[-1].Tast,yystack.l_mark[0].Tast->info.node.arguments);yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 57:
#line 188 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);temp=cons(yystack.l_mark[-2].Tast,temp);yyval.Tast=mk_node(ElsifStatement,temp);}
break;
case 58:
#line 191 "pcat.y"
	{yyval.Tast=mk_node(WriteParameters,NULL);}
break;
case 59:
#line 192 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);yyval.Tast=mk_node(WriteParameters,temp);}
break;
case 60:
#line 195 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(WriteExpressions,temp);}
break;
case 61:
#line 196 "pcat.y"
	{yystack.l_mark[0].Tast->info.node.arguments=cons(yystack.l_mark[-2].Tast,yystack.l_mark[0].Tast->info.node.arguments);yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 62:
#line 199 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);yyval.Tast=mk_node(WriteExpression,temp);}
break;
case 63:
#line 200 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(WriteExpression,temp);}
break;
case 64:
#line 203 "pcat.y"
	{yyval.Tast=mk_node(WriteContents,NULL);}
break;
case 65:
#line 204 "pcat.y"
	{yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 66:
#line 207 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(Expressions,temp);}
break;
case 67:
#line 208 "pcat.y"
	{yystack.l_mark[0].Tast->info.node.arguments=cons(yystack.l_mark[-2].Tast,yystack.l_mark[0].Tast->info.node.arguments);yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 68:
#line 211 "pcat.y"
	{ast* temp=mk_int(atoi(yytext));yyval.Tast=mk_node(Expression,cons(temp,NULL));}
break;
case 69:
#line 212 "pcat.y"
	{ast* temp=mk_real(atof(yytext));yyval.Tast=mk_node(Expression,cons(temp,NULL));}
break;
case 70:
#line 213 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(Expression,temp);}
break;
case 71:
#line 214 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);yyval.Tast=mk_node(Expression,temp);}
break;
case 72:
#line 215 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);temp=cons(yystack.l_mark[-1].Tast,temp);yyval.Tast=mk_node(Expression,temp);}
break;
case 73:
#line 216 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);temp=cons(yystack.l_mark[-1].Tast,temp);temp=cons(yystack.l_mark[-2].Tast,temp);yyval.Tast=mk_node(Expression,temp);}
break;
case 74:
#line 217 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);temp=cons(yystack.l_mark[-1].Tast,temp);yyval.Tast=mk_node(Expression,temp);}
break;
case 75:
#line 218 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);temp=cons(yystack.l_mark[-1].Tast,temp);yyval.Tast=mk_node(Expression,temp);}
break;
case 76:
#line 219 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);temp=cons(yystack.l_mark[-1].Tast,temp);yyval.Tast=mk_node(Expression,temp);}
break;
case 77:
#line 222 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(LeftValues,temp);}
break;
case 78:
#line 223 "pcat.y"
	{yystack.l_mark[0].Tast->info.node.arguments=cons(yystack.l_mark[-2].Tast,yystack.l_mark[0].Tast->info.node.arguments);yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 79:
#line 226 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(LeftValue,temp);}
break;
case 80:
#line 227 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);temp=cons(yystack.l_mark[-3].Tast,temp);yyval.Tast=mk_node(LeftValue,temp);}
break;
case 81:
#line 228 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);cons(yystack.l_mark[-2].Tast,temp);yyval.Tast=mk_node(LeftValue,temp);}
break;
case 82:
#line 231 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);yyval.Tast=mk_node(ActualParameters,temp);}
break;
case 83:
#line 232 "pcat.y"
	{yyval.Tast=mk_node(ActualParameters,NULL);}
break;
case 84:
#line 235 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(CompleteValues,temp);}
break;
case 85:
#line 236 "pcat.y"
	{yystack.l_mark[0].Tast->info.node.arguments=cons(yystack.l_mark[-2].Tast,yystack.l_mark[0].Tast->info.node.arguments);yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 86:
#line 239 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);cons(yystack.l_mark[-3].Tast,temp);yyval.Tast=mk_node(CompleteValue,temp);}
break;
case 87:
#line 242 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[-1].Tast,NULL);yyval.Tast=mk_node(Array,temp);}
break;
case 88:
#line 245 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(ArrayValues,temp);}
break;
case 89:
#line 246 "pcat.y"
	{yystack.l_mark[0].Tast->info.node.arguments=cons(yystack.l_mark[-2].Tast,yystack.l_mark[0].Tast->info.node.arguments);yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 90:
#line 249 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(ArrayValue,temp);}
break;
case 91:
#line 250 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);temp=cons(yystack.l_mark[-2].Tast,temp);yyval.Tast=mk_node(ArrayValue,temp);}
break;
case 92:
#line 253 "pcat.y"
	{yyval.Tast=mk_node(UnaryOperation,NULL);}
break;
case 93:
#line 254 "pcat.y"
	{yyval.Tast=mk_node(UnaryOperation,NULL);}
break;
case 94:
#line 255 "pcat.y"
	{yyval.Tast=mk_node(UnaryOperation,NULL);}
break;
case 95:
#line 258 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 96:
#line 259 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 97:
#line 260 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 98:
#line 261 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 99:
#line 262 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 100:
#line 263 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 101:
#line 264 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 102:
#line 265 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 103:
#line 266 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 104:
#line 267 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 105:
#line 268 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 106:
#line 269 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 107:
#line 270 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 108:
#line 271 "pcat.y"
	{yyval.Tast=mk_node(BinaryOperation,NULL);}
break;
case 109:
#line 274 "pcat.y"
	{ast_list* temp=cons(yystack.l_mark[0].Tast,NULL);yyval.Tast=mk_node(Identifiers,temp);}
break;
case 110:
#line 275 "pcat.y"
	{yystack.l_mark[0].Tast->info.node.arguments=cons(yystack.l_mark[-2].Tast,yystack.l_mark[0].Tast->info.node.arguments);yyval.Tast=yystack.l_mark[0].Tast;}
break;
case 111:
#line 278 "pcat.y"
	{ast* temp=mk_str(yytext);ast_list* temp2=cons(temp,NULL);yyval.Tast=mk_node(Identifier,temp2);}
break;
case 112:
#line 280 "pcat.y"
	{;}
break;
case 113:
#line 281 "pcat.y"
	{;}
break;
case 114:
#line 282 "pcat.y"
	{;}
break;
case 115:
#line 283 "pcat.y"
	{;}
break;
case 116:
#line 284 "pcat.y"
	{;}
break;
case 117:
#line 285 "pcat.y"
	{;}
break;
case 118:
#line 286 "pcat.y"
	{;}
break;
case 119:
#line 287 "pcat.y"
	{;}
break;
case 120:
#line 288 "pcat.y"
	{;}
break;
case 121:
#line 289 "pcat.y"
	{;}
break;
case 122:
#line 290 "pcat.y"
	{;}
break;
case 123:
#line 291 "pcat.y"
	{;}
break;
case 124:
#line 292 "pcat.y"
	{;}
break;
case 125:
#line 293 "pcat.y"
	{;}
break;
case 126:
#line 294 "pcat.y"
	{;}
break;
case 127:
#line 295 "pcat.y"
	{;}
break;
case 128:
#line 296 "pcat.y"
	{;}
break;
case 129:
#line 297 "pcat.y"
	{;}
break;
case 130:
#line 298 "pcat.y"
	{;}
break;
case 131:
#line 299 "pcat.y"
	{;}
break;
case 132:
#line 300 "pcat.y"
	{;}
break;
case 133:
#line 301 "pcat.y"
	{;}
break;
case 134:
#line 302 "pcat.y"
	{;}
break;
case 135:
#line 303 "pcat.y"
	{;}
break;
case 136:
#line 304 "pcat.y"
	{;}
break;
case 137:
#line 305 "pcat.y"
	{;}
break;
case 138:
#line 306 "pcat.y"
	{;}
break;
case 139:
#line 307 "pcat.y"
	{;}
break;
case 140:
#line 308 "pcat.y"
	{;}
break;
case 141:
#line 309 "pcat.y"
	{;}
break;
case 142:
#line 310 "pcat.y"
	{;}
break;
case 143:
#line 311 "pcat.y"
	{;}
break;
case 144:
#line 312 "pcat.y"
	{;}
break;
case 145:
#line 313 "pcat.y"
	{;}
break;
case 146:
#line 314 "pcat.y"
	{;}
break;
case 147:
#line 315 "pcat.y"
	{;}
break;
case 148:
#line 316 "pcat.y"
	{;}
break;
case 149:
#line 317 "pcat.y"
	{;}
break;
case 150:
#line 318 "pcat.y"
	{;}
break;
case 151:
#line 319 "pcat.y"
	{;}
break;
case 152:
#line 320 "pcat.y"
	{;}
break;
case 153:
#line 321 "pcat.y"
	{;}
break;
case 154:
#line 322 "pcat.y"
	{;}
break;
case 155:
#line 323 "pcat.y"
	{;}
break;
case 156:
#line 324 "pcat.y"
	{;}
break;
case 157:
#line 325 "pcat.y"
	{;}
break;
case 158:
#line 326 "pcat.y"
	{;}
break;
case 159:
#line 327 "pcat.y"
	{;}
break;
case 160:
#line 328 "pcat.y"
	{;}
break;
case 161:
#line 329 "pcat.y"
	{;}
break;
case 162:
#line 330 "pcat.y"
	{;}
break;
case 163:
#line 331 "pcat.y"
	{;}
break;
case 164:
#line 332 "pcat.y"
	{;}
break;
case 165:
#line 333 "pcat.y"
	{;}
break;
case 166:
#line 334 "pcat.y"
	{;}
break;
case 167:
#line 335 "pcat.y"
	{;}
break;
case 168:
#line 336 "pcat.y"
	{;}
break;
case 169:
#line 337 "pcat.y"
	{;}
break;
case 170:
#line 338 "pcat.y"
	{;}
break;
case 171:
#line 339 "pcat.y"
	{;}
break;
case 172:
#line 340 "pcat.y"
	{;}
break;
case 173:
#line 341 "pcat.y"
	{;}
break;
case 174:
#line 342 "pcat.y"
	{;}
break;
case 175:
#line 343 "pcat.y"
	{;}
break;
case 176:
#line 344 "pcat.y"
	{;}
break;
case 177:
#line 347 "pcat.y"
	{;}
break;
case 178:
#line 348 "pcat.y"
	{;}
break;
case 179:
#line 349 "pcat.y"
	{;}
break;
case 180:
#line 350 "pcat.y"
	{;}
break;
case 181:
#line 351 "pcat.y"
	{;}
break;
case 182:
#line 352 "pcat.y"
	{;}
break;
case 183:
#line 353 "pcat.y"
	{;}
break;
case 184:
#line 354 "pcat.y"
	{;}
break;
case 185:
#line 355 "pcat.y"
	{;}
break;
case 186:
#line 356 "pcat.y"
	{;}
break;
case 187:
#line 357 "pcat.y"
	{;}
break;
case 188:
#line 358 "pcat.y"
	{;}
break;
case 189:
#line 359 "pcat.y"
	{;}
break;
case 190:
#line 360 "pcat.y"
	{;}
break;
case 191:
#line 361 "pcat.y"
	{;}
break;
case 192:
#line 362 "pcat.y"
	{;}
break;
case 193:
#line 363 "pcat.y"
	{;}
break;
case 194:
#line 364 "pcat.y"
	{;}
break;
case 195:
#line 365 "pcat.y"
	{;}
break;
case 196:
#line 366 "pcat.y"
	{;}
break;
case 197:
#line 367 "pcat.y"
	{;}
break;
case 198:
#line 368 "pcat.y"
	{;}
break;
case 199:
#line 369 "pcat.y"
	{;}
break;
case 200:
#line 370 "pcat.y"
	{;}
break;
case 201:
#line 371 "pcat.y"
	{;}
break;
case 202:
#line 372 "pcat.y"
	{;}
break;
case 203:
#line 373 "pcat.y"
	{;}
break;
case 204:
#line 374 "pcat.y"
	{;}
break;
case 205:
#line 375 "pcat.y"
	{;}
break;
case 206:
#line 376 "pcat.y"
	{;}
break;
case 207:
#line 377 "pcat.y"
	{;}
break;
case 208:
#line 378 "pcat.y"
	{;}
break;
case 209:
#line 379 "pcat.y"
	{;}
break;
case 210:
#line 380 "pcat.y"
	{;}
break;
case 211:
#line 381 "pcat.y"
	{;}
break;
case 212:
#line 382 "pcat.y"
	{;}
break;
case 213:
#line 383 "pcat.y"
	{;}
break;
case 214:
#line 384 "pcat.y"
	{;}
break;
case 215:
#line 385 "pcat.y"
	{;}
break;
case 216:
#line 386 "pcat.y"
	{;}
break;
case 217:
#line 387 "pcat.y"
	{;}
break;
case 218:
#line 388 "pcat.y"
	{;}
break;
case 219:
#line 389 "pcat.y"
	{;}
break;
case 220:
#line 390 "pcat.y"
	{;}
break;
case 221:
#line 391 "pcat.y"
	{;}
break;
case 222:
#line 392 "pcat.y"
	{;}
break;
case 223:
#line 393 "pcat.y"
	{;}
break;
case 224:
#line 394 "pcat.y"
	{;}
break;
case 225:
#line 395 "pcat.y"
	{;}
break;
case 226:
#line 396 "pcat.y"
	{;}
break;
case 227:
#line 397 "pcat.y"
	{;}
break;
case 228:
#line 398 "pcat.y"
	{;}
break;
case 229:
#line 399 "pcat.y"
	{;}
break;
case 230:
#line 400 "pcat.y"
	{;}
break;
case 231:
#line 401 "pcat.y"
	{;}
break;
case 232:
#line 402 "pcat.y"
	{;}
break;
case 233:
#line 403 "pcat.y"
	{;}
break;
case 234:
#line 404 "pcat.y"
	{;}
break;
case 235:
#line 405 "pcat.y"
	{;}
break;
case 236:
#line 406 "pcat.y"
	{;}
break;
case 237:
#line 407 "pcat.y"
	{;}
break;
case 238:
#line 408 "pcat.y"
	{;}
break;
case 239:
#line 409 "pcat.y"
	{;}
break;
case 240:
#line 410 "pcat.y"
	{;}
break;
case 241:
#line 411 "pcat.y"
	{;}
break;
#line 2029 "y.tab.c"
    }
    yystack.s_mark -= yym;
    yystate = *yystack.s_mark;
    yystack.l_mark -= yym;
    yym = yylhs[yyn];
    if (yystate == 0 && yym == 0)
    {
#if YYDEBUG
        if (yydebug)
            printf("%sdebug: after reduction, shifting from state 0 to\
 state %d\n", YYPREFIX, YYFINAL);
#endif
        yystate = YYFINAL;
        *++yystack.s_mark = YYFINAL;
        *++yystack.l_mark = yyval;
        if (yychar < 0)
        {
            if ((yychar = YYLEX) < 0) yychar = 0;
#if YYDEBUG
            if (yydebug)
            {
                yys = 0;
                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                if (!yys) yys = "illegal-symbol";
                printf("%sdebug: state %d, reading %d (%s)\n",
                        YYPREFIX, YYFINAL, yychar, yys);
            }
#endif
        }
        if (yychar == 0) goto yyaccept;
        goto yyloop;
    }
    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
        yystate = yytable[yyn];
    else
        yystate = yydgoto[yym];
#if YYDEBUG
    if (yydebug)
        printf("%sdebug: after reduction, shifting from state %d \
to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
#endif
    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
    {
        goto yyoverflow;
    }
    *++yystack.s_mark = (short) yystate;
    *++yystack.l_mark = yyval;
    goto yyloop;

yyoverflow:
    yyerror("yacc stack overflow");

yyabort:
    yyfreestack(&yystack);
    return (1);

yyaccept:
    yyfreestack(&yystack);
    return (0);
}
